//
//  ViewController.m
//  加速计&陀螺仪
//
//  Created by apple on 2017/4/12.
//  Copyright © 2017年 hzq. All rights reserved.
//

#import "ViewController.h"
#import <CoreMotion/CoreMotion.h>
@interface ViewController ()
@property (nonatomic,strong) CMMotionManager *motionManager;
@end

@implementation ViewController



- (void)viewDidLoad {
    [super viewDidLoad];
//    [self distanceSensorS];
//    [self useAccelerometerPush];
//    [self useAccelerometerPull];
    [self useGyroPush];
}

// 距离传感器
-(void)distanceSensorS {
    // 开启距离感应功能
    [UIDevice currentDevice].proximityMonitoringEnabled = YES;
    // 监听距离感应的通知
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(proximityChange:)
                                                 name:UIDeviceProximityStateDidChangeNotification
                                               object:nil];
}
- (void)proximityChange:(NSNotification *)notification {
    if ([UIDevice currentDevice].proximityState == YES) {
        NSLog(@"某个物体靠近了设备屏幕"); // 屏幕会自动锁住
    } else {
        NSLog(@"某个物体远离了设备屏幕"); // 屏幕会自动解锁
    }
}


// 加速计(push模式,),实时采集所有数据（采集频率高）
- (void)useAccelerometerPush{
    // 1.初始化全局管理对象
    self.motionManager = [[CMMotionManager alloc] init];
    // 2.判断加速度计可不可用，判断加速度计是否开启
    if ([self.motionManager isAccelerometerAvailable]){
        // 3.告诉manager，更新频率是100Hz
        self.motionManager.accelerometerUpdateInterval = 1.0/30.0; // 1秒钟采样30次
        
        // 4.开始采集 (push方法)  在次队列采集完后返回主队列，返回accelerometerData
        [self.motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMAccelerometerData * _Nullable accelerometerData, NSError * _Nullable error) {
            NSLog(@"X = %.04f",accelerometerData.acceleration.x);
            NSLog(@"Y = %.04f",accelerometerData.acceleration.y);
            NSLog(@"Z = %.04f",accelerometerData.acceleration.z);
        }];
    } else {
        NSLog(@"加速计不可用");
    }
}

// 加速计(pull模式,),在有需要的时候，再主动去采集数据
- (void)useAccelerometerPull{
    //初始化全局管理对象
    CMMotionManager *manager = [[CMMotionManager alloc] init];
    //判断加速度计可不可用，判断加速度计是否开启
    if ([manager isAccelerometerAvailable]){
        //告诉manager，更新频率是100Hz
        manager.accelerometerUpdateInterval = 0.01;
        //开始更新，后台线程开始运行。这是Pull方式。
        [manager startAccelerometerUpdates];
        //获取并处理加速度计数据
        CMAccelerometerData *newestAccel = manager.accelerometerData;
        NSLog(@"X = %.04f",newestAccel.acceleration.x);
        NSLog(@"Y = %.04f",newestAccel.acceleration.y);
        NSLog(@"Z = %.04f",newestAccel.acceleration.z);
    }
}

//陀螺仪使用Push方式获取
- (void)useGyroPush{
    // 创建运动管理者对象
    CMMotionManager *manager = [[CMMotionManager alloc] init];
    manager.showsDeviceMovementDisplay = YES;
    // 1.判断陀螺仪可不可以，判断陀螺仪是不是开启
    if ([manager isGyroAvailable]){
        
        NSOperationQueue *queue = [[NSOperationQueue alloc] init];
        // 2.告诉manager，更新频率是100Hz
        manager.gyroUpdateInterval = 0.01;
        // 3.Push方式获取和处理数据
        [manager startGyroUpdatesToQueue:queue
                             withHandler:^(CMGyroData *gyroData, NSError *error)
         {
             // 获取陀螺仪的信息
             CMRotationRate rotationRate = gyroData.rotationRate;
             NSLog(@"x:%f y:%f z:%f", rotationRate.x, rotationRate.y, rotationRate.z);
         }];
    }
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


@end
